home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 August (Alt) / CHIP 2005-08.1.iso / program / guvenlik / syslinux-3.07.exe / font.inc < prev    next >
Encoding:
Text File  |  2004-12-27  |  3.4 KB  |  132 lines

  1. ;; $Id: font.inc,v 1.7 2004/12/27 07:04:08 hpa Exp $
  2. ;; -----------------------------------------------------------------------
  3. ;;   
  4. ;;   Copyright 1994-2004 H. Peter Anvin - All Rights Reserved
  5. ;;
  6. ;;   This program is free software; you can redistribute it and/or modify
  7. ;;   it under the terms of the GNU General Public License as published by
  8. ;;   the Free Software Foundation, Inc., 53 Temple Place Ste 330,
  9. ;;   Boston MA 02111-1307, USA; either version 2 of the License, or
  10. ;;   (at your option) any later version; incorporated herein by reference.
  11. ;;
  12. ;; -----------------------------------------------------------------------
  13.  
  14. ;;
  15. ;; font.inc
  16. ;;
  17. ;; VGA font handling code
  18. ;;
  19.  
  20.         section .text
  21.  
  22. ;
  23. ; loadfont:    Load a .psf font file and install it onto the VGA console
  24. ;        (if we're not on a VGA screen then ignore.)  It is called with
  25. ;        SI and DX:AX set by routine searchdir
  26. ;
  27. loadfont:
  28.         mov bx,trackbuf            ; The trackbuf is >= 16K; the part
  29.         mov cx,[BufSafe]        ; of a PSF file we care about is no
  30.         call getfssec            ; more than 8K+4 bytes
  31.  
  32.         mov ax,[trackbuf]        ; Magic number
  33.         cmp ax,0436h
  34.         jne lf_ret
  35.  
  36.         mov al,[trackbuf+2]        ; File mode
  37.         cmp al,5            ; Font modes 0-5 supported
  38.         ja lf_ret
  39.  
  40.         mov bh,byte [trackbuf+3]    ; Height of font
  41.         cmp bh,2            ; VGA minimum
  42.         jb lf_ret
  43.         cmp bh,32            ; VGA maximum
  44.         ja lf_ret
  45.  
  46.         ; Copy to font buffer
  47.         mov si,trackbuf+4        ; Start of font data
  48.         mov [VGAFontSize],bh
  49.         mov di,vgafontbuf
  50.         mov cx,(32*256) >> 2        ; Maximum size
  51.         rep movsd
  52.  
  53.         mov [UserFont], byte 1        ; Set font flag
  54.  
  55.         ; Fall through to use_font
  56.  
  57. ;
  58. ; use_font:
  59. ;     This routine activates whatever font happens to be in the
  60. ;    vgafontbuf, and updates the adjust_screen data.
  61. ;       Must be called with CS = DS = ES
  62. ;
  63. use_font:
  64.         test [UserFont], byte 1        ; Are we using a user-specified font?
  65.         jz adjust_screen        ; If not, just do the normal stuff
  66.  
  67.         mov bp,vgafontbuf
  68.         mov bh,[VGAFontSize]
  69.  
  70.         xor bl,bl            ; Needed by both INT 10h calls
  71.         cmp [UsingVGA], byte 1        ; Are we in graphics mode?
  72.         jne .text
  73.  
  74. .graphics:
  75.         xor cx,cx
  76.         mov cl,bh            ; CX = bytes/character
  77.         mov ax,480
  78.         div cl                ; Compute char rows per screen
  79.         mov dl,al
  80.         dec al
  81.         mov [VidRows],al
  82.         mov ax,1121h            ; Set user character table
  83.         int 10h
  84.         mov [VidCols], byte 79        ; Always 80 bytes/line
  85. .lf_ret:    ret                ; No need to call adjust_screen
  86.  
  87. .text:
  88.         mov cx,256
  89.         xor dx,dx
  90.         mov ax,1110h
  91.         int 10h                ; Load into VGA RAM
  92.  
  93.         xor bl,bl
  94.         mov ax,1103h            ; Select page 0
  95.         int 10h
  96.  
  97.         ; Fall through to adjust_screen
  98.  
  99. lf_ret        equ use_font.lf_ret
  100.  
  101. ;
  102. ; adjust_screen: Set the internal variables associated with the screen size.
  103. ;        This is a subroutine in case we're loading a custom font.
  104. ;
  105. adjust_screen:
  106.         pusha
  107.                 mov al,[BIOS_vidrows]
  108.                 and al,al
  109.                 jnz vidrows_ok
  110.                 mov al,24                       ; No vidrows in BIOS, assume 25
  111.                         ; (Remember: vidrows == rows-1)
  112. vidrows_ok:    mov [VidRows],al
  113.                 mov ah,0fh
  114.                 int 10h                         ; Read video state
  115.                 dec ah                          ; Store count-1 (same as rows)
  116.                 mov [VidCols],ah
  117.         popa
  118.         ret
  119.  
  120.         
  121. ; VGA font buffer at the end of memory (so loading a font works even
  122. ; in graphics mode, but don't put too much pressure on the .bss)
  123.         section .latebss
  124. vgafontbuf    resb 8192
  125.  
  126.         section .data
  127.         align 2, db 0
  128. VGAFontSize    dw 16            ; Defaults to 16 byte font
  129. UserFont    db 0            ; Using a user-specified font
  130.  
  131.  
  132.